/*
 * Logger.h
 *
 *  Created on: Sep 25, 2011
 *      Author: nicoabie
 */

#ifndef LOGGER_H_
#define LOGGER_H_

#include <sstream>
#include <iostream>
#include <fstream>
#include "../../persistencia/tinyxml/tinyxml.h"

//De menor a mayor
enum LogLevel{TRACE,INFO,DEBUG};

class Logger {
public:

	//Parche, no se puede hacer multiBorderthread con archivos
	static void init();
	static void finish();
	/**
	 * Metodo que se encarga imprimir por pantalla el mensaje de log.
	 * @params	clase
	 * @params	metodo
	 * @params	mensaje
	 */
	static void debug(std::string clase, std::string metodo, std::string mensaje);
	static void debug(std::string clase, std::string metodo, std::stringstream* mensaje);

	static void info(std::string clase, std::string metodo, std::string mensaje);
	static void info(std::string clase, std::string metodo, std::stringstream* mensaje);


	static void trace(std::string clase, std::string metodo, std::string mensaje);
	static void trace(std::string clase, std::string metodo, std::stringstream* mensaje);

	static void trace(std::string clase, std::string metodo,TiXmlElement* xmlElement, std::string mensaje);



private:
	static void logBase(LogLevel level,std::string clase, std::string metodo, std::string mensaje);
	static void logBase(LogLevel level,std::string clase, std::string metodo, std::stringstream* mensaje);



	static std::string getDateTime();
	static std::string toUpper(std::string s);

	static std::ofstream file;
	const static LogLevel logLevelSet = DEBUG;

};

#endif /* LOGGER_H_ */
